home *** CD-ROM | disk | FTP | other *** search
- ; The FileLoader Segment, a0=Pointer to FileName, a1=Memory to Load to
- ; a2 = MFM Buffer Space ($3400 Bytes please) and d0 = Drive number
-
- ; Cannot handle directories or FFS disks!! Be Done Soon m8s, reshuffled
- ; by Mr. Spillage
-
- ; Code taken out that german-book.
-
- Opt c-
- Section "File Loader",Code_c
-
- IncDir Df1:
-
- Start Movem.l d0-d7/a0-a6,-(sp)
- Bsr ResetAll
-
- Moveq #0,d7
- Lea CommPnt(pc),a6
- Move.l a0,0(a6)
- NameLen Add.b #1,d7
- Cmpi.b #0,(a0)+
- Bne NameLen
- Move.l d7,4(a6)
-
- Lea MFMPoint(pc),a6
- Lea FileAdd(pc),a5
- Move.l a1,0(a5)
- Move.l a2,0(a6)
- Move.w d0,4(a6)
-
- Add.w d0,d0
- Lea Set0Track0(pc),a6
- Tst.w (a6,d0.w)
- Bne ZeroSet
-
- SetTrack0 Moveq #0,d0
- Lea DriveNumber(pc),a6
- Move.w (a6),d1
- Bsr DTrack+$20
- Lea DriveNumber(pc),a6
- Move.w (a6),d0
- Add.w d0,d0
- Lea Set0Track0(pc),a6
- St (a6,d0.w)
-
- ZeroSet Lea CommPnt(pc),a6
- Sub.l #1,4(a6)
- Move.l 0(a6),a0
- Move.l 4(a6),d0
- Moveq #0,d2
- Move.l d0,d1
- Subq #1,d1
-
- HashLoop Mulu #13,d0
- Move.b (a0)+,d2
- Bsr Upper
- Add.w d2,d0
- And.w #$7ff,d0
- Dbf d1,HashLoop
-
- Divu #72,d0
- Swap d0
- Addq #6,d0
- Lea Hash(pc),a6
- Move.w d0,(a6)
-
- Move.l #880,d0
- Bsr LoadSec
-
- Move.l MFMPoint(pc),a0
- Moveq #0,d0
- Move.w Hash(pc),d0
- Lsl.w #2,d0
- Move.l 0(a0,d0),d0
- Tst.l d0
- Beq None
-
- LoadLoop Lea Sector(pc),a6
- Move.l d0,(a6)
- Bsr LoadSec
-
- Move.l CommPnt(pc),a0
- Move.l MFMPoint(pc),a1
- Add.l #432,a1
- Move.l CommLen(pc),d0
- Cmp.b (a1)+,d0
- Bne NextSec
- Subq #1,d0
-
- NameLoop Move.b (a1)+,d2
- Bsr Upper
- Move.w d2,d1
- Move.b (a0)+,d2
- Bsr Upper
- Cmp.b d1,d2
- Bne NextSec
- Dbf d0,NameLoop
- Bra SectorOK
-
- NextSec Move.l MFMPoint(pc),a6
- Move.l 496(a6),d0
- Tst.l d0
- Bne LoadLoop
-
- Moveq #3,d0
- Lea DriveNumber(pc),a6
- Move.w (a6),d1
- Bsr DTrack+$20
-
- None Bra Quit
-
- SectorOK Move.l MFMPoint(pc),a6
- Cmp.l #2,508(a6)
- Bne NoDir
- Bra Quit
-
- NoDir Bra SecLoop1
-
- SecLoop
- SecLoop1 Lea SectorHead(pc),a6
- Tst (a6)
- Bne CopySect
- St (a6)
- Bra GetHeader
- CopySect Move.l MFMPoint(pc),a6
- Move.l 12(a6),d7
- Lea FileAdd(pc),a6
- Move.l (a6),a4
- Add.l d7,(a6)
- Subq #1,d7
- Move.l MFMPoint(pc),a5
- Add.l #$18,a5
- CopSec Move.b (a5)+,(a4)+
- Dbf d7,CopSec
- JustLoad Move.l MFMPoint(pc),a6
- Move.l 16(a6),d0
- Tst.l d0
- Beq Quit
- Lea Sector(pc),a6
- Move.l d0,(a6)
- Bsr LoadSec
- Bra SecLoop
-
- GetHeader Move.l MFMPoint(pc),a6
- Move.l 81*4(a6),d0
- Lea FileLength(pc),a6
- Move.l d0,(a6)
- Bra JustLoad
-
- Quit Movem.l (sp)+,d0-d7/a0-a6
- Moveq #0,d0
- Rts
-
- LoadSec Movem.l d0-d7/a0-a6,-(sp)
- Lea SectorLoad(pc),a6
- Move.w d0,(a6)
- Moveq #1,d0
- Lea DriveNumber(pc),a6
- Move.w (a6),d1
- Bsr DTrack+$20
- Moveq #2,d0
- Move.w SectorLoad(pc),d1
- Move.l MFMPoint(pc),a0
- Move.l a0,a1
- Add.l #$200,a1
- Bsr DTrack+$20
- Movem.l (sp)+,d0-d7/a0-a6
- Rts
-
- Upper Cmp.b #"a",d2
- Blo UpperX
- Cmp.b #"z",d2
- Bhi UpperX
- Sub.w #$20,d2
-
- UpperX Rts
-
- ResetAll Lea Sector(pc),a6
- Move.l #0,(a6)+
- Move.w #0,(a6)+
- Move.l #0,(a6)+
- Move.l #0,(a6)+
- Lea SectorLoad(pc),a6
- Move.w #0,0(a6)
- Move.w #0,6(a6)
- Move.l #0,8(a6)
- Rts
-
-
- MFMPoint Dc.l 0
- DriveNumber Dc.w 0
- Set0Track0 Dc.w 0
- Set0Track1 Dc.w 0
- Set0Track2 Dc.w 0
- Set0Track3 Dc.w 0
- SectorLoad Dc.w 0
- FileAdd Dc.l $d0000
- SectorHead Dc.w 0
- FileLength Dc.l 0
-
- Sector Dc.l 0
- Hash Dc.w 0
- CommPnt Dc.l 0
- CommLen Dc.l 0
-
- DTrack Incbin MyMateMarmite/DTrakkerFINAL-Seg
-
-
-
-
-
-
-
-
-
-